package cn.com.zpark.xml;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

import java.util.ArrayList;
import java.util.List;

/**
 * @PackageName: cn.com.zpark.xml
 * @ClassName: DOM4JParseXML
 * @Description:dom4j解析xml文件
 * @author: RZS
 * @date: 2021/11/1  14:51
 */
public class DOM4JParseXML {
    /*
     * 使用dom4j解析xml的大致步骤
     * 1.创建SAXReader
     * 2.使用SAXReader读取xml文档并且生成Document对象。
     * 	  这一步也是dom解析耗资源的地方，因为首先要先将文档所有数据读取完毕，并且以一个Document对象
     * 	  的形式保存在内存当中
     * 3.通过Document对象获取根元素
     * 4.按照xml文档的结构从根元素开始逐级遍历xml文档数据的目的
     */
    public static void main(String[] args) {
        // 获取XML文件路径
        String path = DOM4JParseXML.class.getClassLoader().getResource("Beans.xml").getPath();

        // 1.创建SAXReader
        SAXReader reader = new SAXReader();

        try {
            // 2.使用SAXReader读取xml文档并且生成Document对象。
            Document document = reader.read(path);
            /*
             * Document提供了获取根元素的方法：Element getRootElement()
             *
             * 而element的每一个实例用于表示当前xml文件的一个元素（一对标签），它提供了获取
             * 其元素相关的方法：
             * 获取当前标签的名字：String getName()
             * 获取当前标签中间的文本：String getText()
             * 获取当前标签下指定名字的子标签：Element element(String name)
             * 获取当前标签下的所有子标签：List elements()
             * 获取当前标签下指定名字的子标签：List elements(String name)
             *
             * 获取当前标签下指定名字标签的属性：Attribute sttribute(String name)
             * Attribute的每一个实例表示一个属性，它有两个方法：
             * 获取属性名：String getName()
             * 获取属性值：String getValue()
             */
            // 3.通过Document对象获取根元素
            Element rootElement = document.getRootElement();

            List<Bean> list = new ArrayList<>();

            // 获取跟标签下所有子标签
            List<Element> elements = rootElement.elements();
            for (Element element : elements) {
                System.err.println(element.getName());

                Bean bean = new Bean();
                String name = element.elementTextTrim("name");
                String loca = element.elementTextTrim("location");
                int age = Integer.parseInt(element.elementTextTrim("age"));
                System.out.println(name+"--"+loca+"---"+age);

                bean.setName(name);
                bean.setLocalhost(loca);
                bean.setAge(age);

                // 添加到集合
                list.add(bean);
            }
            System.out.println(list);
        } catch (Exception e) {
            System.out.println("xml资源加载失败");
            e.printStackTrace();
        }
    }
}
